package com.shisan.tingshu.search.task;

import com.shisan.tingshu.search.service.ItemService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;


@Component
@Slf4j
public class RebuildBloomFilterTask {

    @Autowired
    private ItemService itemService;

    /**
     * cron表达式有7位，但实际使用的只有6位，即：秒 分 时 日 月 周 （年）
     * 注意：日和周不能同时出现，所以如果写日，就不要写周，用一个?占位即可
     *
     * 书写格式如下：
     * 字段	允许值	特殊字符
     * 秒	0-59	, - * /
     * 分	0-59	, - * /
     * 时	0-23	, - * /
     * 日	1-31	, - * / ?
     * 月	1-12 或 JAN-DEC	, - * /
     * 周	0-7 或 SUN-SAT	, - * / ?
     * 注意：0 和 7 均表示周日
     *
     * 特殊字符说明：
     * 字符	含义	                        示例
     * *	所有值（任意时刻）	            0 * * * * *：表示每分钟执行
     * ?	忽略该字段（仅用于日或周）	    0 0 0 ? * MON：表示每周一执行
     * -	范围	                        0 0 9-17 * * *：表示9点到17点每小时执行
     * ,	多个值	                    0 0 8,12,18 * * *：表示每天8点、12点、18点执行
     * /	步长	                        0 0/5 * * * *：表示每5分钟执行一次
     */

//    @Scheduled(cron = "0 0 2 */7 * ?")   // 每周日凌晨2点执行
//    @Scheduled(cron = "*/10 * * * * *")  // 每10秒执行一次（测试用）
//    @Scheduled(fixedDelay = 1000) // 每隔1秒执行一次
    public void rebuildBloomFilter() {
        Boolean aBoolean = itemService.rebuildBloomFilter();
        log.info("分布式布隆重建：{}", aBoolean ? "成功" : "失败");
    }
}
